#ifndef TCP_SERVER_WRAPPER_H
#define TCP_SERVER_WRAPPER_H

#include <cstdint>
#include "libdaq/utils/wrapper_util.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * 创建TCP服务器实例
 * @param ip_address IP地址字符串
 * @param ip_size IP地址字符串长度
 * @param port 端口号
 * @return TCP服务器句柄
 */
DLL_EXPORT uint32_t* CALL_FUNCTION TcpServer_New(const char* ip_address, int ip_size, uint_least16_t port);

/**
 * 删除TCP服务器实例
 * @param handle TCP服务器句柄
 */
DLL_EXPORT void CALL_FUNCTION TcpServer_Delete(uint32_t* handle);

/**
 * 开始接受客户端连接
 * @param handle TCP服务器句柄
 * @param duration_ms 持续时间（毫秒）
 * @param async 是否异步
 * @param client_count 客户端数量
 */
DLL_EXPORT void CALL_FUNCTION TcpServer_StartAccept(uint32_t* handle, int duration_ms, bool async, unsigned int client_count);

/**
 * 检查接受连接是否完成
 * @param handle TCP服务器句柄
 * @return 是否完成
 */
DLL_EXPORT bool CALL_FUNCTION TcpServer_IsAcceptComplete(uint32_t* handle);

/**
 * 断开指定客户端连接
 * @param handle TCP服务器句柄
 * @param ip 客户端IP地址字符串
 * @param ip_size IP地址字符串长度
 */
DLL_EXPORT void CALL_FUNCTION TcpServer_DisconnectClient(uint32_t* handle, const char* ip, int ip_size);

/**
 * 获取客户端IP地址列表
 * @param handle TCP服务器句柄
 * @param client_count 客户端数量（输出参数）
 * @return 客户端IP地址数组
 */
DLL_EXPORT char** CALL_FUNCTION TcpServer_GetClientsIP(uint32_t* handle, uint8_t& client_count);

/**
 * 获取指定IP的客户端
 * @param handle TCP服务器句柄
 * @param ip 客户端IP地址字符串
 * @param ip_size IP地址字符串长度
 * @return 客户端句柄
 */
DLL_EXPORT uint32_t* CALL_FUNCTION TcpServer_GetClient(uint32_t* handle, const char* ip, int ip_size);

#ifdef __cplusplus
}
#endif

#endif // TCP_SERVER__H 